package cn.summit.entity;

import java.time.LocalDate;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import cn.summit.common.Constants;
import lombok.Data;
import lombok.EqualsAndHashCode;

import static javax.persistence.CascadeType.ALL;

/**
 *
 * ,@Entity 定义对象将会成为被JPA管理的实体，将映射到指定的数据库表
 * 、@Table 指定数据库的表名
 * 、@Id 定义属性为数据库的主键，一个实体里面必须有一个
 * 、@IdClass、利用外部类的联合主键
 * ,@GeneratedValue 主键生成策略
 * 				TABLE通过表产生主键，框架由表模拟序列产生主键，使用该策略可以使应用更易于数据库移植
 * 				SEQUENCE 通过序列产生主键，通过@Seq 注解指定序列名，mysql不支持
 * 				IDENTITY 采用数据库id自动增长，一般用于Mysql数据库
 * 				AUTO jpa自动选择合适的策略，是默认选项
 * 、@Basic 表示属性是到数据库表的字段的映射。如果实体的字段上没有任何注解，默认即为@Basic
 * 、@Transient表示该属性并非一个到数据库表的字段的映射，表示非持久化属性，与@Basic作用相反。JPA映射数据库的时候忽略它
 * 、@Column定义该属性对应数据库中的列名
 * 、@Temporal 用来设置Date类型的属性映射到对应精度的字段
 * 、@Enumerated 直接映射enum枚举类型的字段
 * 、@Lob 将属性映射成数据库支持的大对象类型，支持以下两种数据库类型的字段
 *
 * @author summit
 * @since 2021/11/26 16:36
 */

@EqualsAndHashCode(callSuper = true)
@Entity
@Table(schema = Constants.schema)
@Data
public class Trade extends BaseEntity {


	private String tradeId;

	@OneToOne(cascade = ALL)
//	@JoinColumn(name = "id", referencedColumnName = "trade_record_id")
	@JoinColumn(name = "trade_record_id")
	private Product products;

	public static void main(String[] args) {
		LocalDate date = LocalDate.now();
		System.out.println("当日：" + date);
		LocalDate lastBizDate = LocalDate.now().minusDays(3);
		System.out.println("上一工作日：" + lastBizDate);
		lastBizDate = lastBizDate.plusDays(1);
		Set<LocalDate> listDateSet = new HashSet<>();
		while (lastBizDate.compareTo(date) <= 0) {
			listDateSet.add(lastBizDate);
			lastBizDate = lastBizDate.plusDays(1);
		}

		System.out.println(listDateSet);
	}
}
